<?php
/** @name : bootstrap.php - @author : theerasak.p - @since : 21 �.�. 2554 1:17:47 - @encoding : UTF-8 */

require_once 'system.config.inc.php';
require_once 'system.constant.php';
#Bootstrap File

require_once LIBRARIES_SYSTEM_PATH.'/exception.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/funcs.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/message.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/console.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/util.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/session.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/database.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/template.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/html.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/render.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/date.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/path.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/ui.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/file.library.php';
require_once LIBRARIES_SYSTEM_PATH.'/debug.library.php';


try
{
	# เปิดการใช้งาน Session
	Session::open();
	# สร้างตัวแปรเพื่อใช้ส่งข้อความเข้า Console สำหรับการ Debug
	Console::start();
	Console::write("Welcome to KOOK-FRAMEWORK");

	if(isset($_POST) || isset($_GET['url']))
	{
		# ตัดสตริงเพื่อระบุเป็น Controller name โดยแปลงให้ตัวแรกเป็นตัวใหญ่
		$var = split('/',$_GET['url']);
		
		
		# ตัดสตริงเพื่อระบุเป็น Action name และ ตัวแปรจาก get method
		$controller = $var[0];
			$var = split("!",$var[1]);

		# ระบุตัวแปรแรกให้เป็น Action โดยแปลงให้ตัวแรกเป็นตัวใหญ่
		$action = $var[0];
		
		if($action!= EXCEPTION && class_exists("Config") && Config::$dbConnect)
		{
			DB::connect();
		}

		# ถ้าหากไม่มีการส่งค่า action มาให้ตั้ง action ตั้งต้นเป็น home
		if(empty($action) && !empty($controller)){
			$action="home";
		}

		if($controller == "system")
		{
			$controllerPath = CONTROLLERS_SYSTEM_PATH;
		}
		else
		{
			$controllerPath = CONTROLLERS_PATH;
		}
		

		# ถ้าหากไม่ระบุ Controller และ Action ให้เรียกไปยังหน้า Main
		if(!$controller && !$action)
		{
			if(!$subDomain)
			{
				Console::write("Enter HOMEPAGE");
				
				require $controllerPath.'/domain.controller.php';
				$domain = new DomainController();
				$domain->home();
			}
			else
			{
				
				Console::write("Enter : Controller:".$controller." Action:".$action);
				
				$controllerFile = $subDomain.".domain.sub.controller.php";
				$controllerClass = ucfirst($subDomain)."DomainSubController";

				if(file_exists($controllerPath.'/'.$controllerFile))
				{
					require $controllerPath.'/'.$controllerFile;
					$controller = new $controllerClass();
					$controller->home();
				}
				else
				{
					throw new PageNotFoundException(ALERT_EXCEPTION_NOT_FOUND_CONTROLLER);
				}
				
				
			}
		}
		else
		{
			Console::write("Enter : [SUB:".$subDomain."] [C:".$controller."] [A:".$action."]");
			if($subDomain)
			{
				$controllerFile = $subDomain.".".$controller.'.sub.controller.php';
				$controllerClass = ucfirst($subDomain).ucfirst($controller)."SubController";
			}
			else
			{
				$controllerFile = $controller.'.controller.php';
				$controllerClass = ucfirst($controller)."Controller";
			}
			
			# ตรวจสอบว่าพบไฟล์ Controller รึเปล่า
			if(file_exists($controllerPath.'/'.$controllerFile))
			{
				require $controllerPath.'/'.$controllerFile;

				# ตรวจสอบ Class ว่ามีอยู่จริงรึเปล่า
				if(class_exists($controllerClass))
				{
					$controller = new $controllerClass();
					# ตรวจสอบว่า Action ที่ส่งมามีอยู่จริงรึเปล่า
					if(method_exists($controller,$action))
					{
						# เรียกไปยัง Action ที่ระบุมา
						$controller->$action();
					}
					else
					{
						throw new PageNotFoundException(ALERT_EXCEPTION_NOT_FOUND_ACTION);
					}
				}
				else
				{
					throw new PageNotFoundException(ALERT_EXCEPTION_NOT_FOUND_CONTROLLER);
				}
			}
			else
			{
				throw new PageNotFoundException(ALERT_EXCEPTION_NOT_FOUND_CONTROLLER);
			}
		}
	}

	DB::disconnect();
}
catch (PageNotFoundException $e)
{
	
	$e->execute();
}
catch (InstallException $e)
{
	$e->execute();
}

?>